package com.librelato.tela;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.primefaces.context.RequestContext;

import com.librelato.bean.UsuarioBean;
import com.librelato.negocio.UsuarioServico;

@ManagedBean
@RequestScoped
public class PrincipalTela extends TelaAbstrata {

	@ManagedProperty(value = "#{usuario}")
	private UsuarioBean usuario;

	private String senhaAtual;

	private String senhaNova;

	private String confSenha;

	private String url = "";

	private UsuarioServico<UsuarioBean> servico = new UsuarioServico<UsuarioBean>();

	public PrincipalTela() {
		try {
			usuario = usuario == null ? (UsuarioBean) ((HttpSession) FacesContext
					.getCurrentInstance().getExternalContext().getSession(false))
					.getAttribute("usuario") : usuario;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String invalidaSessao() {
		FacesContext.getCurrentInstance().addMessage(
				null,
				new FacesMessage(FacesMessage.SEVERITY_WARN,
						"Sessao Encerrada", ""));
		((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
				.getSession(false)).invalidate();
		return "/index.xhtml";
	}

	public String logOut() {
		String url = "/index.xhtml";
		((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
				.getSession(false)).invalidate();
		return url;
	}

	public boolean menuPermitido(String menu) {
		boolean permite = false;
		for (int i = 0; i < usuario.getListaMenus().size(); i++) {
			if (usuario.getListaMenus().get(i).equals(menu)) {
				permite = true;
				break;
			}
		}
		return permite;
	}

	public void trocarSenha() {
		FacesMessage msg = null;
		if (usuario.getSenha().trim().equalsIgnoreCase(senhaAtual.trim())) {
			try {
				this.servico.trocarSenha(usuario, senhaNova);
				msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
						this.servico.getValor("msg_header_sucesso"),
						this.servico.getValor("msg_troca_senha_sucesso"));
				usuario.setSenha(senhaNova);
				RequestContext.getCurrentInstance().execute("dlg10.hide()");

			} catch (Exception e) {
				msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
						this.servico.getValor("msg_header_erro"),
						this.servico.getValor("msg_troca_senha_erro_dao"));
				e.printStackTrace();
			}
		} else {
			msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					this.servico.getValor("msg_header_erro"),
					this.servico.getValor("msg_troca_senha_erro"));
		}
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}

	public void limpaFormSenha() {
		senhaAtual = "";
		senhaNova = "";
		confSenha = "";
	}

	@Override
	protected UsuarioServico<UsuarioBean> getServico() {
		return servico;
	}

	public UsuarioBean getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioBean usuario) {
		this.usuario = usuario;
	}

	public String getSenhaAtual() {
		return senhaAtual;
	}

	public void setSenhaAtual(String senhaAtual) {
		this.senhaAtual = senhaAtual;
	}

	public String getSenhaNova() {
		return senhaNova;
	}

	public void setSenhaNova(String senhaNova) {
		this.senhaNova = senhaNova;
	}

	public String getConfSenha() {
		return confSenha;
	}

	public void setConfSenha(String confSenha) {
		this.confSenha = confSenha;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
	
	
}
